#include "PlotPage.h"
#include "oled.h"

namespace MircoUi {


    void PlotPage::clear() {
        plot_len = 0; // 重置绘图长度
        status = 0; 
    }
    void PlotPage::appendPlot(uint8 value) {
        plot[plot_ptr] = value; // 将新值添加到绘图数组
        plot_ptr = (plot_ptr + 1) % 128; // 更新绘图指针，循环使用
        if (plot_len < 120) {
            plot_len++; // 如果绘图长度小于128，增加长度
        }   
        status = 0; 
    }
    void PlotPage::onEvent(uint32 event_id, uint32 event_par) {
        if (eventCB) {
            eventCB(event_id, event_par);
        }
        if (event_id == eEvent::TICK) {
            // 处理定时器事件
        } else if (event_id == eEvent::ENTER_PAGE) {
            // 处理进入页面事件
        } else if (event_id == eEvent::EXIT_PAGE) {
            status = 0; // 清除状态，准备退出页面
        }
    }
    void PlotPage::refresh() {
        if (status == 0) { // 如果页面未绘制
            OLED_Clear(); // 清空OLED屏幕
            OLED_ShowString(0, 0, title, 8, 1); // 显示标题
            // 绘制绘图数据
            for (uint8 i = 0; i < plot_len; i++) {
                uint16 ptr = plot_ptr-1;
                ptr-= i; 
                ptr%= 128;
                uint8 value = plot[ptr]; // 获取当前绘图值
                OLED_DrawPoint(127 - i, 63 - value, 1); 
            }            
            status = 1; // 标记页面已绘制
            OLED_Refresh(); // 刷新OLED屏幕
        }        
    }

    
}

